a = [0] * 100
# 0号位存放初始值可以简化程序逻辑
# 否则就要在程序中判断第一次的情况，因为对于第一次来说没有前一次
a[0] = 1

n = 7
count = 0
def search(s, t):
    global a, count 
    # 拆分出来的数字最大是s, 最小不能比前一次拆分出来的数字小，否则就会出现重复方案
    # 第一次不存在前一次，所以第一次拆分出来的数只要保证不比题意中的最小值(也就是1)小就可以了
    # 另一种思路：可以理解为第一次的前一次是第0次，所以只要把题意中的最小值放在0号位即可
    for i in range(a[t - 1], s + 1):
        if i == n:
            continue

        a[t] = i
        s -= i
        if s == 0:
            print(a[1:t + 1])
            count += 1
        else:
            search(s, t + 1)
        s += i

# n: 待拆分的数字
# 1: 拆分出的数字的数量
search(n, 1)
print(count)
